package com.kurtphpr.sistema.venda;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import com.kurtphpr.sistema.cliente.Cliente;
import com.kurtphpr.sistema.cliente.ClienteRN;
import com.kurtphpr.sistema.produto.Produto;
import com.kurtphpr.sistema.produto.ProdutoRN;

@ViewScoped
@ManagedBean(name = "registroVendas")
public class RegistroVendaBean {

	private Cliente clienteSelecionado;
	private Produto produtoSelecionado = new Produto();
	private List<Produto> carrinhoCompras = new ArrayList<>();
	private List<SelectItem> clientesSelect;
	private float valorTotal;

	private Produto produtoPesquisado = new Produto();
	
	public List<SelectItem> getClientesSelect() {
		if (this.clientesSelect == null) {
			clientesSelect = new ArrayList<SelectItem>();

			ClienteRN clienteRN = new ClienteRN();

			List<Cliente> listaClientes = clienteRN.listar();

			if (listaClientes != null && !listaClientes.isEmpty()) {
				SelectItem item;
				for (Cliente clienteLista : listaClientes) {

					item = new SelectItem(clienteLista, clienteLista.getNome());
					clientesSelect.add(item);
				}
			}

		}

		return clientesSelect;
	}

	public String buscarProduto() {
		ProdutoRN produtoRN = new ProdutoRN();

		if (this.produtoSelecionado.getId() != null
				&& !this.produtoSelecionado.getId().equals("")) {
			this.produtoPesquisado = produtoRN.pesquisarPorId(this.produtoSelecionado.getId());

			if (this.produtoPesquisado != null) {
//				this.carrinhoCompras.add(produtoPesquisado);
//				calculaTotal();
			}

		}
		return null;
	}

	private void calculaTotal() {

		this.valorTotal = 0;

		if (!this.carrinhoCompras.isEmpty()) {
			for (Produto p : this.carrinhoCompras) {
				valorTotal += p.getValor();
			}
		}

	}

//	public String finalizarVenda() {
//
//		if (!this.carrinhoCompras.isEmpty()) {
//			ArrayList<Venda> vendas = new ArrayList<Venda>();
//			VendaRN vendaRN = new VendaRN();
//			
//			
//			for (Produto produto : this.carrinhoCompras) {
//
//				if (this.clienteSelecionado != null) {
//					if (vendaRN.existeEstoqueProduto(produto)) {
//						vendas.add(new Venda(produto, this.clienteSelecionado));
//					}
//				}
//			}
//
//			for (Venda venda : vendas) {
//				
//				venda.setDataVenda(new Date());
//				vendaRN.registraVenda(venda);
//				vendaRN.reduzEstoqueProduto(venda.getProduto());
//			}
//
//		}
//
//		return null;
//	}

	public String finalizarVenda(){
		if(this.produtoPesquisado != null && this.clienteSelecionado != null){
			VendaRN vendaRN = new VendaRN();
			
			Venda venda = new Venda(this.produtoPesquisado, this.clienteSelecionado);
			venda.setDataVenda(new Date());
			vendaRN.registraVenda(venda);
			
			produtoPesquisado.setStatus('V');
			vendaRN.setStatusProduto(produtoPesquisado);
			
			float saldoAnteriorDoCliente = clienteSelecionado.getSaldo();
			
			clienteSelecionado.setSaldo(saldoAnteriorDoCliente - produtoPesquisado.getValor());
			vendaRN.debitaSaldoCliente(clienteSelecionado);
			
		}
		
		return null;
	}
	
	public String excluirProdutoCarrinho() {
		if (this.carrinhoCompras != null && !this.carrinhoCompras.isEmpty()) {
			if (this.produtoSelecionado != null) {
				this.carrinhoCompras.remove(this.produtoSelecionado);
				calculaTotal();
			}
		}
		return null;
	}

	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Produto getProdutoSelecionado() {
		return produtoSelecionado;
	}

	public void setProdutoSelecionado(Produto produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
	}

	public List<Produto> getCarrinhoCompras() {
		return carrinhoCompras;
	}

	public void setCarrinhoCompras(List<Produto> carrinhoCompras) {
		this.carrinhoCompras = carrinhoCompras;
	}

	public float getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(float valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Produto getProdutoPesquisado() {
		return produtoPesquisado;
	}

	public void setProdutoPesquisado(Produto produtoPesquisado) {
		this.produtoPesquisado = produtoPesquisado;
	}

}
